package linz

import linz.log.LogUtil.Companion.log as l


/**
 * 简单的语法
 */
fun main(args: Array<String>) {
    //TODO 1. null 判断
    var name: String ? = null;
    var l = name?.length
//    var l2 = name!!.length

    // todo 2. range
    val number = 148
    //在范围内
    if (number in 10..59) {

    }
    //不在范围内
    if (number !in 10..59) {

    }

    //todo 3. when
    val week = 3
    // KT if 是表达式 有返回值
    //Java 的if 是语句
    val info = when (week) {
        1-> "Ok"
        else -> {
            println("Hello world!") //返回 kotlin.Unit 用Unit类代替java的void关键字
        }
    }

    println(info)

    //TODO 4. Let， 匿名函数返回最后一行
    var str: String?
    str = ""

    val r = str?.let{
        //it == str 本身
        if (it.isBlank()) "Default" else "[$it]"
    }

    val result2 = listOf(1,2,3,4,5).let {
        it.first() + it.last()
    }

    println(result2)

    println(r)

    //TODO 5 空合并操作符
    var person :String? = null

    println(person ?: "person null 执行")
    //let 函数 + 空合并操作符
    println(person?.let { "[$it]" } ?: "person null 执行")


    // TODO 6 重命名扩展
    l("dadfafasfa")


}

//enum 枚举
enum class RGB { RED, GREEN, BLUE }

inline fun <reified T : Enum<T>> printAllValues() {
    // enumValues
    //enumValueOf
    print(enumValues<T>().joinToString { it.name })
}

@JvmInline
value class Password(private val s: String)


